package cc.rengu.redp.system.service;

import cc.rengu.redp.common.domain.RedpResponse;
import cc.rengu.redp.common.exception.RedpException;
import cc.rengu.redp.system.domain.FileCharacter;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

public interface FileManageService {

    /**
     * 获取当前目录文件列表
     *
     * @param currPath 当前路径，如： /abc/def
     * @return
     */
    List<FileCharacter> getFileList(String currPath);

    /**
     * 创建文件夹
     * @param currPath 当前路径，如： /abc/def
     * @param directoryName 文件夹名称
     * @return
     */
    RedpResponse createDirectory(String currPath, String directoryName);

    /**
     * 删除文件
     * @param fullNames 需要删除的文件列表
     * @return
     */
    RedpResponse deleteFileOrDirectory(List<String> fullNames);

    /**
     * 删除文件
     * @param fullName 需要删除的文件
     * @return
     */
    RedpResponse deleteFileOrDirectory(String fullName);

    /**
     * 重命名
     * @param fullName 路径全名，如： /abc/def/g.pdf
     * @param targetName 修改后名称
     * @return
     */
    RedpResponse renameFileOrDirectory(String fullName, String targetName);

    /**
     * 移动文件或目录
     * @param fullNames 需要移动的文件列表
     * @param targetPath 目标路径，如： /abc/def
     * @return
     */
    RedpResponse moveFileOrDirectory(List<String> fullNames, String targetPath);

    /**
     * 获取简单文件名
     * @param fullName
     * @return
     */
    String getSimpleFileName(String fullName);

    /**
     * 下载文件
     * @param fullName
     * @param outputStream
     */
    void downloadFile(String fullName, OutputStream outputStream) throws RedpException;

    /**
     * 上传文件
     * @param fullName
     * @param inputStream
     */
    void uploadFile(String fullName, InputStream inputStream, boolean allowRewrite) throws RedpException;

    /**
     *
     * @param fullName
     * @return
     */
    FileCharacter getFileCharacter(String fullName);
}
